package org.korifey.ffbdd.api;

import java.util.List;
import java.util.Set;

import org.korifey.ffbdd.api.deprecated.Bdd;
import org.korifey.ffbdd.api.op.IBinaryOperation;

public interface IBddDomain {
	public <T> IBdd<T> makeConst(T value);
	public <T> IBdd<T> makeNode(int var, T valueOne, T valueZero, boolean inversed);
	
	public <T1, T2, T> IBdd<T> applyBinary(IBdd<T1> b1, IBdd<T2> b2, IBinaryOperation<T1, T2, T> binop);
	public <T> IBdd<T> ite(IBdd<Boolean> cond, IBdd<T> thenBranch, IBdd<T> elseBranch);
	
	public void setLazy(boolean lazy);
	public boolean isLazy();
	
	public List<IBdd<?>> listBDDs();
}
